package util

import (
	"fmt"
	"time"
)

var RetryFlag chan bool = make(chan bool)

// 重试机制，要重试的方法不固定，所以传func 重试的时间间隔是  []int{},  重试是不影响正常的逻辑执行
func Retry(f func() bool, rules []int) {
	fmt.Println("===>>> 进入重试机制")

	for i, v := range rules {
		// 重试次数达到上限，结束执行
		fmt.Println("重试次数", i)
		go time.AfterFunc(time.Duration(v)*time.Second, func() {
			RetryFlag <- f()
		}) // todo 多久之后执行方法

		if <-RetryFlag {
			fmt.Println("重试成功")
			return
		}
	}
	//重试次数达到上限，结束执行
	fmt.Println("重试次数达到上限")
	return
}
